package com.caregiver.watch.business.user.service;

import com.caregiver.watch.business.user.model.dto.AddContactParam;
import com.caregiver.watch.business.user.model.dto.AvatarParam;
import com.caregiver.watch.business.user.model.dto.BindAddressParam;
import com.caregiver.watch.business.user.model.dto.ChangeEmailParam;
import com.caregiver.watch.business.user.model.dto.ChangePhoneParam;
import com.caregiver.watch.business.user.model.dto.RealNameParam;
import com.caregiver.watch.business.user.model.dto.RegisterParam;
import com.caregiver.watch.business.user.model.dto.UpdateUserHealthGoalParam;
import com.caregiver.watch.business.user.model.dto.UserHealthGoalParam;
import com.caregiver.watch.business.user.model.po.User;
import com.caregiver.watch.business.user.model.vo.AccessTokenVo;
import com.caregiver.watch.business.user.model.vo.UserHealthGoalVo;
import com.caregiver.watch.business.user.model.vo.UserInfoVo;

/**
 * @Description: 用户服务
 * @Author 疆戟
 * @Date 2025/8/15 0:05
 * @Version 1.0
 */
public interface UserService {

    /**
     * 根据手机号查询用户
     * @param phone 手机号
     * @return 用户
     */
    User queryUserByPhone(String phone);

    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 用户
     */
    User queryUserByUsername(String username);

    /**
     * 验证手机号是否已经存在
     * @param phone 手机号
     * @return 是否存在
     */
    Boolean checkPhoneExists(String phone);

    /**
     * 注册用户
     * @param param 注册参数
     * @return 访问令牌
     */
    AccessTokenVo register(RegisterParam param);

    /**
     * 设置头像
     * @param avatar
     * @return
     */
    Boolean setAvatar(AvatarParam avatar);

    /**
     * 实名认证
     * @param param
     * @return
     */
    Boolean realName(RealNameParam param);

    /**
     * 更换手机号
     * @param param
     * @return
     */
    Boolean changePhone(ChangePhoneParam param);

    /**
     * 更换邮箱
     * @param param
     * @return
     */
    Boolean changeEmail(ChangeEmailParam param);

    /**
     * 获取用户信息
     * @return
     */
    UserInfoVo getUserInfo();

    /**
     * 设置用户健康目标
     * @param param
     * @return
     */
    Boolean setUserHealthGoal(UserHealthGoalParam param);

    /**
     * 获取用户健康目标
     * @return
     */
    UserHealthGoalVo queryUserHealthGoal();

    /**
     * 获取用户健康目标
     * @return
     */
    UserHealthGoalVo queryUserHealthGoal(Long userId);
}
